事情總是事與願違... 還以為今天可以開始動工了。
IAM Identity Center 的使用者與權限都已經就緒,接下來進入實戰環節!
在本地開發環境裡,讓 VS Code 透過 AWS Toolkit 連上剛才設定好的 IAM Identity Center 帳號,並從 S3 讀取資料。
全域命名空間中為唯一
官方文件是這麼說的:
Bucket names must be unique across all AWS accounts in all of the AWS Regions within a partition. A partition is a grouping of Regions. AWS currently has three partitions: aws (commercial Regions), aws-cn (China Regions), and aws-us-gov (AWS GovCloud (US) Regions)
AWS 分為三個 Partition:商業用的一般 AWS 區域、中國專用區域、美國政府專用區域,這裡取的 bucket 名稱必須是在 Partition 中唯一。
簡單說,一般使用到的這些 Region (雪梨、東京、新加坡...) 皆同屬 commercial partition
,Bucket Name 是不允許重複的。
Workforce
和 IAM Credentials
如果選擇 IAM Credentials,接下來就會需要提供 Access Key
、Secret Key
。但先前明明才提過:非必要請不要建立 IAM 金鑰。
既然都已經設定好 IAM Identity Center,就可以安心選擇 Workforce,然後選擇 Continue。
Your AWS access portal URL
就是囉!不知道是什麼原因,測試過程中偶爾會出現從瀏覽器登入後是跳轉到帳戶入口網站的情況。
但只要在 VS Code 上取消,再按一次 Continue 就會正常顯示 IDE 授權詢問了。
Permission Sets
[^2]Toolkit 成功登入代表 VS Code 可以拿到 Identity Center 發下來的 臨時憑證。
但臨時憑證到底能不能用在開發上呢...?
boto3
import boto3
def read_s3_file(bucket_name: str, object_key: str, encoding: str = "utf-8") -> str:
"""
讀取 AWS S3 上的檔案並回傳內容
:param bucket_name: S3 bucket 名稱
:param object_key: 檔案路徑
:param encoding: 文字編碼,預設 utf-8
:return: 檔案內容(字串)
"""
s3_client = boto3.client("s3")
try:
response = s3_client.get_object(Bucket=bucket_name, Key=object_key)
content = response["Body"].read().decode(encoding)
return content
except Exception as e:
print(f"讀取 S3 檔案時發生錯誤: {e}")
return ""
# 範例使用
if __name__ == "__main__":
bucket = "ithome-ironman-2025"
key = "tarot.json"
content = read_s3_file(bucket, key)
print(content)
PS C:\Projects\2025-ironman\s3-reader> python .\main.py
讀取 S3 檔案時發生錯誤: Unable to locate credentials
原來 AWS Toolkit 取得的憑證,沒辦法直接讓 boto3 使用啊...
查閱了官方文件:boto3 1.40.35 documentation - Credentials
boto3 的驗證方式依序為:程式碼 → 環境 → 檔案 → 容器/EC2。
(詳細內容補充在文章末)
雖說 boto3 會自動抓取驗證資訊,但 Toolkit 登入後,是將暫時性憑證存在自己的快取,並利用這個驗證讓 IDE 直接操作 AWS 雲端環境,並不會寫進 boto3 使用的設定檔中。
既然 boto3 不能直接使用 Toolkit 的憑證,那只好另外設定其他適合的驗證方式。
從目前的資訊可以得知,最簡便的方式就是直接下載 AWS ACCESS KEY 並設定在環境變數,可是...這有違這個學習過程想實踐的 Best Practice。
且不說官方沒有提供直接取得憑證的方式,就算從設定檔把憑證找出來了,也會因為 Permission Set 設定的 工作階段持續時間
,到期就直接失效。
還是採用正規的方式,老實設定 boto3 適用的驗證方法比較好!
就定位上來說:
Toolkit = 讓 IDE 直接操作 AWS 的入口
CLI/SSO = 讓 SDK/程式碼取得憑證的入口 ← boto3 屬於這裡
所以下一篇:boto3 的本地端驗證 但我可能還是會取一些怪標題
[^1]: 建立系統管理員可參考文章:Day 4. 沒有人會 24 小時都是員工
[^2]: 建立 Permission Sets 可參考文章:Day 7. Identity Center:Final Season